package com.mg.simulate;


import org.junit.jupiter.api.Test;

import java.util.List;


public class Main {

    @Test
    public void testAdd() {
        List<String> list = new MyArrayList(5);
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("e");
        list.forEach(System.out::println);
        System.out.println(list.size());
    }

    @Test
    public void testAddOnIndex() {
        List<String> list = new MyArrayList(5);
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("e");

        System.out.println(list.size());

        System.out.println("--------------");

        list.add(6, "f");

        list.forEach(System.out::println);
        System.out.println(list.size());
    }

    @Test
    public void testAddAll() {
        //TODO
    }


    @Test
    public void testGet() {

        List<String> list = new MyArrayList(5);
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("e");

        System.out.println(list.get(0));
        System.out.println(list.get(3));
    }

    @Test
    public void testRemoveByIndex() {

        List<String> list = new MyArrayList(5);
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("e");

        list.forEach(System.out::println);
        System.out.println(list.size());

        System.out.println("----------------");

        list.remove(2);
        list.forEach(System.out::println);
        System.out.println(list.size());
    }

    @Test
    public void testRemoveByObject01() {

        List<String> list = new MyArrayList(5);
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("e");

        list.forEach(System.out::println);
        System.out.println(list.size());

        System.out.println("----------------");

        list.remove(new String("a"));

        list.remove("b");

        list.forEach(System.out::println);
        System.out.println(list.size());
    }

    @Test
    public void testRemoveByObject02() {

        List<Integer> list = new MyArrayList(5);
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);

        list.forEach(System.out::println);
        System.out.println(list.size());

        System.out.println("----------------");

        //作为索引，删除掉index = 1位置的值：即第一个值为2的元素被删除
        list.remove(1);

        list.forEach(System.out::println);
        System.out.println(list.size());


        System.out.println("----------------");

        //作为Object，删除的是值为1的对象元素
        list.remove(new Integer(1));

        list.forEach(System.out::println);
        System.out.println(list.size());
    }

    /**
     * 求两个集合的交集
     */
    @Test
    public void testretainAll() {

        List<Integer> list1 = new MyArrayList(5);
        list1.add(1);
        list1.add(2);
        list1.add(3);
        list1.add(4);
        list1.add(5);

        List<Integer> list2 = new MyArrayList(5);
        list2.add(6);
        list2.add(1);
        list2.add(2);
        list2.add(3);
        list2.add(4);
        list2.add(5);
        list1.retainAll(list2);
        System.out.println(list1);
    }
}